#ifndef ArvBinPesqMayors_
#define ArvBinPesqMayors_

#include <vector>
#include "ArvBinPesq.h"
#include "Utilizador.h"

/**
 * Arvore binaria de pesquisa para Mayors das cidades.
 */
class ArvBinPesqMayors: public ArvBinPesq<Utilizador*> {
private:
	void emOrdemDecrescente(ArvBinNodo<Utilizador*>* rz) const;

public:
	void emOrdemDecrescente() const;
	void carregar_mayors(const std::vector<Utilizador*> mayors);
	void listar_mayors() const;
};

void ArvBinPesqMayors::emOrdemDecrescente() const {
	std::cout << "Mayors das cidades em ordem decrescente: ";
	emOrdemDecrescente(this->raiz);
	std::cout << std::endl;
}

void ArvBinPesqMayors::emOrdemDecrescente(ArvBinNodo<Utilizador*>* rz) const {
	if (rz != NULL) {
		emOrdemDecrescente(rz->getDir());
		std::cout << rz->getInf()->get_nickname() << " (" << rz->getInf()->get_pontos_totais() << ") ";
		emOrdemDecrescente(rz->getEsq());
	}
	return;
}

void ArvBinPesqMayors::carregar_mayors(const std::vector<Utilizador*> mayors) {
	for (unsigned int i = 0; i < mayors.size(); i++) {
		juntarno(mayors[i]);
	}
}

void ArvBinPesqMayors::listar_mayors() const {
	if (vazia()) {
		cout << "Erro: Nao existem mayors!" << endl;
		return;
	}

	emOrdemDecrescente();
}

#endif
